/*
java的异常机制
理想情况下，程序会按照我们的思路去运行。但是代码实际编写后不一定是完美的正确的，可能会有我们考虑不到的情况
如果这些情况能够正常得到一个错误还好，但如果直接导致程序运行出现问题呢
比如下面这段代码，1/0会报错。当程序出现我们考虑到的情况时，就会出现异常或错误。
 */
package com.test.Exception;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ExceptionClass extends Throwable {
    public static void main(String[] args) {
//        test(1,0);

        //数组越界异常
//        int[] arr = new int[3];
//        arr[3] = 1;  //报错越界，ArrayIndexOutOfBoundsException

        //空指针异常
//        String s = null;
//        s.getBytes();  //随便调用一个方法报错，NullPointerException

/*
其实我们之前已经接触过一些异常，比如数组越界异常，空指针异常，算数异常等，他们其实都是异常类型
每一个异常都是一个类，他们都继承自Exception类。异常的本质依然是类的对象，但是异常类型支持在程序运行出问题时抛出
也就是上面的红色报错，也可以提前声明，告知使用者需要处理可能会出现的异常。
其实我们之前已经接触过一些异常了，比如数组越界

NullPointerException继承自RuntimeException类
RuntimeException继承自Exception类
Exception继承的是Throwable类

 */
        //编译时异常
        /*
        File file = new File("my.txt");
        try {
            file.createNewFile();  //要调用此方法，首先要处理异常
        } catch (IOException e) {
            e.printStackTrace();
        }

         */
        //Integer.MAX_VALUE 大概21亿，错误，OutOfMemoryError，: Requested array size exceeds VM limit
        int[] arr = new int[Integer.MAX_VALUE];
        System.out.println("lwb");
    }

    public static int test(int a, int b){
        return a/b;
    }
}
